import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-04-30
 * Time: 22:39
 */
public class Solution {

    public Stack<Integer> stack = new Stack<>();
    // 单调栈
    // 从栈底到栈顶递增
    public Stack<Integer> singleStack = new Stack<>();
    public void push(int node) {
        stack.push(node);
        // 新的值比栈顶小, 就入栈
        if(singleStack.isEmpty() || node < singleStack.peek()){
            singleStack.push(node);
        }else{
            // 新的值比栈顶值大, 那么重复入栈栈顶元素
            // 普通栈与单调栈中元素个数总是相同, 并且单调栈中记录的是当前所有元素中的最小值
            singleStack.push(singleStack.peek());
        }
    }

    public void pop() {
        // 两个栈都要出栈
        // 这样才能保证两个栈中元素个数相同, 并且单调栈中记录的总是当前最小的值
        stack.pop();
        singleStack.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int min() {
        return singleStack.peek();
    }
}
